package com.yangchao.webflux;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class chat01flatMap {
    public static void main(String[] args) {
        // 假设我们有这样一个列表的列表
        List<List<String>> listOfLists = Arrays.asList(
                Arrays.asList("app;le", "banana"),
                Arrays.asList("carrot", "date"),
                Arrays.asList("elderberry", "fig")
        );
        // 使用flatMap将每个子列表转换成一个流，然后将这些流扁平化为一个单一的流
        List<String> flatList = listOfLists.stream()
                .flatMap(list->{
                    // 这里将每个List<String>转换为Stream<String>
                    return list.stream().flatMap(s->{
                        // 这里将每个String转换为Stream<String>
                        return Arrays.stream(s.split(";"));
                    });
                })
                // 这里将每个List<String>转换为Stream<String>，然后扁平化
                .toList(); // 最后收集结果到List<String>
        // 输出结果
        // flatList.forEach(System.out::println);



        List<Student> students = new ArrayList<>();
        students.add(new Student("张;三", 18));
        students.add(new Student("李四", 19));
        students.add(new Student("王五", 20));
        // 使用flatMap来处理包含分号的学生名字，拆分成多个学生对象
        List<Student> splitStudents = students.stream()
                .flatMap(stu -> {
                    String[] names = stu.name().split(";");
                    List<Student> newStudents = new ArrayList<>();
                    for (String name : names) {
                        newStudents.add(new Student(name.trim(), stu.age()));
                    }
                    return newStudents.stream();
                })
                .toList();

        // 输出结果
        splitStudents.forEach(stu -> System.out.println(stu.name() + ": " + stu.age()));
    }
}
